[IA64] Add support for sending event channel interrupts to VT-i guest
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Tue, 22 Aug 2006 20:42:05 +0000 (14:42 -0600)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Tue, 22 Aug 2006 20:42:05 +0000 (14:42 -0600)
Signed-off-by: Tsunehisa Doi <Doi.Tsunehisa@jp.fujitsu.com>
Signed-off-by: Tomonari Horikoshi <t.horikoshi@jp.fujitsu.com>
xen/arch/ia64/vmx/vmx_process.c

index e36d81820dfcae31b782bd952a96ed92e0c21e4b..b56d8e7665a5f44cf98e182da8edf5a7e97f2b32 100644 (file)
@@ -186,6 +186,7 @@ void leave_hypervisor_tail(struct pt_regs *regs)
 {
     struct domain *d = current->domain;
     struct vcpu *v = current;
+    int callback_irq;
     // FIXME: Will this work properly if doing an RFI???
     if (!is_idle_domain(d) ) { // always comes from guest
 //        struct pt_regs *user_regs = vcpu_regs(current);
@@ -213,6 +214,13 @@ void leave_hypervisor_tail(struct pt_regs *regs)
 //           v->arch.irq_new_pending = 1;
 //       }
 
+        callback_irq = d->arch.hvm_domain.params[HVM_PARAM_CALLBACK_IRQ];
+        if (callback_irq != 0 && local_events_need_delivery()) {
+            /*inject para-device call back irq*/
+            v->vcpu_info->evtchn_upcall_mask = 1;
+            vmx_vcpu_pend_interrupt(v, callback_irq);
+        }
+
         if ( v->arch.irq_new_pending ) {
             v->arch.irq_new_pending = 0;
             v->arch.irq_new_condition = 0;